객체지향의 사실과 오해-역할,책임,협력 관점에서 본 객체지향

[46]

[55]

객체의 모든 행동은 상태를 변화시키는가? - 아니오. 행동에는 상태변화와 메시지 전송이 있다. 메시지 전송 자체는 상태변화를 하지않는다.

객체 간의 유연한 협력과 객체 스스로의 높은 자율성은 상태의 캡슐화의 정도에 따른다.

객체의 프로퍼티는 객체의 상태를 구성하는 특징의 집합이다. 객체의 속성(attribute)은 객체 상태중 에 해당하는 것이다. 객체의 링크는 객체가 메시지를 보낼 수 있는 대상과의 연결 관계이다. 따라서 프로퍼티는 객체의 속성과 링크를 포함한 개념이다.

65 "협력에 참여하는 훌륭한 객체를 설계하기 위한 가장 중요한 덕목은 상태가 아니라 행동에 초점을 맞추는 것이다." 구인광고에 보면 '영상편집에 실력이 있는 사람을 뽑습니다' 라고 나와있듯이 행동에 역할을 부여하는 것이 훨씬 자연스럽다.

값과 객체는 불변성 여부에 따라 구별할 수 있다. 1은 죽었다 깨어나도 1이지만 객체는 시간에 따라 상태가 변한다. 이는 동등성에서 큰 차이를 발생시킨다. 값은 같기만 하면 동등한 것이라 볼 수 있지만, 객체는 상태가 같다고 같은 객체라고 볼 수 없기 때문이다. 이로 인해 몇몇 객체지향 언어에서는 레퍼런스객체와 값 객체를 구분하곤 한다.

행동이 상태를 결정한다.

69 '이 객체는 전화기 처럼 행동해요' - 은유를 사용하여 현실객체의 의미 일부를 소프트웨어 객체의 행동을 묘사하여 객체를 바라보는 시선을 바꿀 수 있게된다.

77 복잡한 세상을 단순하게 바꾸는 작업을 추상화 라고 한다. 복잡성을 다루기 위해 추상화는 두 차원에서 이루어진다.

  1. 구체적인 사물들 간의 공통점을 취하고 차이점은 버린다: 일반화
  2. 중요한 부분을 강조하고 부차적인 사항을 제거하라

객체라는 추상화를 통해 현실의 복잡성을 극복한다.

87 분류라는 행위를 통해 객체를 공통적인 특징들로 묶인 개념집합으로 위치시킬 수 있으며, 개발자에게 객체들을 더 빨리 찾고 조작할 수 있는 정신적인 지도를 제공해 줄 수 있다.

94 객체지향 시스템에서 동일한 개념집합에 속한 객체들을 하나의 '타입'에 속한 인스턴스로 구현할 수 있다. 즉, 개념은 타입이다. 객체가 동일한 타입을 갖기 위해선 동일한 행동, 동일한 메시지 송수신을 지원하여야 함을 의미하고, 이는 객체지향의 다형성을 의미한다.

97 일반화와 특수화: 일반화 관계는 더 포괄적인 역할을 의미한다. 특수화 관계는 더 구체적이고 역할의 개수가 일반적인 모델에 비해 더 많다.

102 "타입은 시간에 따라 동적으로 변하는 앨리스의 상태를 시간과 무관한 정적인 모습으로 다룰 수 있게 해준다." - 정적타입

105 그러면 클래스는 뭐냐? 클래스는 많은 객체지향 언어들이 차용하는 타입의 구현을 지원하기 위한 매커니즘을 의미한다. 때론 클래스는 코드의 재사용에 사용 되기도 하기 때문에 타입==클래스 라고 생각할 순 없다.

객체의 행동을 분류하기 위해 타입이 도입되었다는 점만 알아두고 가자.